package org.example.util;

import com.mysql.cj.jdbc.MysqlDataSource;
import org.example.expection.AppException;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class DBUtil {//数据库连接获取
    private static final String URL="jdbc:mysql://localhost:3306/servlet_blog?user=nannan&password=root&serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8";
    private static final DataSource DS=new MysqlDataSource();
    //使用URL对DS初始化

    //工具类提供数据JDBC操作，
    // 不足：static代码块出现错误，NoClassDefFoundError表示类可以找到，但是类加载失败，无法运行
    static {//datasource中没有这个方法
        ((MysqlDataSource) DS).setUrl(URL);
    }
    //提供对外数据库连接对象
    public static Connection getConnection(){
        try {
            return DS.getConnection();
        } catch (SQLException e) {
            //抛自定义异常
           throw new AppException("DB001","获取数据库连接失败",e);//错误码，错误消息
        }
    }
   //重载
    public static void close(Connection c, Statement s){
        close(c,s,null);//第一个close方法调用第二个
    }
    public static void close(Connection c, Statement s, ResultSet r){
        try {
            if(r!=null)
                r.close();
            if(s!=null)
                s.close();
            if(c!=null)
                c.close();
        } catch (SQLException e) {
            throw new AppException("DB002","数据库释放资源出错",e);//将e传进去原因
        }
    }
}
